#include <iostream>
#include <list>
#include <thread>
#include <vector>
#include <algorithm>

/**
 * @brief 测试数据竞争问题
 */
void test1()
{
    int nCount{};
    auto increment = [&nCount]()
    {
        for (int i = 0; i < 1000; ++i)
        {
            ++nCount; // 没有同步保护存在数据竞争
        }
    };

    std::vector<std::thread> vecThreads; // 创建线程容器
    for (int i = 0; i < 4; ++i)
    {
        vecThreads.emplace_back(increment); //emplace_back避免不必要的拷贝
    }
    for (auto& thread : vecThreads)
    {
        thread.join(); // 等待所有线程完成
    }
    std::cout << "Final count: " << nCount << std::endl; // 输出最终计数
    // 由于没有同步保护，nCount的值可能不是4000，可能会小于4000
    // 这就是数据竞争的结果，多个线程同时修改同一数据而没有同步机制保护。
}


int main()
{
    test1() ;
    return 0;
}
